<?php

namespace Home\Controller;
use Think\Controller;

Class WxnotifyController extends Controller{
	/**
 * 通用通知接口demo
 * ====================================================
 * 支付完成后，微信会把相关支付和用户信息发送到商户设定的通知URL，
 * 商户接收回调信息后，根据需要设定相应的处理流程。
 * 
 * 这里举例使用log文件形式记录回调信息。
*/
	public function notify_url(){
		
		include_once(APP_PATH."Data/WxPayPubHelper/log_.php");
		include_once(APP_PATH."Data/WxPayPubHelper/WxPayPubHelper.php");
		
    	//使用通用通知接口
		$notify = new Notify_pub();
	
		//存储微信的回调
		$xml = $GLOBALS['HTTP_RAW_POST_DATA'];	
		$notify->saveData($xml);
		


		// $notify->returnXml($xml);
		//验证签名，并回应微信。
		//对后台通知交互时，如果微信收到商户的应答不是成功或超时，微信认为通知失败，
		//微信会通过一定的策略（如30分钟共8次）定期重新发起通知，
		//尽可能提高通知的成功率，但微信不保证通知最终能成功。
		if($notify->checkSign() == FALSE){
			$notify->setReturnParameter("return_code","FAIL");//返回状态码
			$notify->setReturnParameter("return_msg","签名失败");//返回信息
		}else{
			$notify->setReturnParameter("return_code","SUCCESS");//设置返回码
		}
		$returnXml = $notify->returnXml();
		echo $returnXml;
		
		//==商户根据实际情况设置相应的处理流程，此处仅作举例=======
		
		//以log文件形式记录回调信息
		$log_ = new Log_();
		$log_name="APP/Data/WxPayPubHelper/notify_url.log";//log文件路径
		$log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");
	
		if($notify->checkSign() == TRUE)
		{
			if ($notify->data["return_code"] == "FAIL") {
				//此处应该更新一下订单状态，商户自行增删操作
				$log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
			}
			elseif($notify->data["result_code"] == "FAIL"){
				//此处应该更新一下订单状态，商户自行增删操作
				$log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
			}
			else{
				//此处应该更新一下订单状态，商户自行增删操作
				$log_->log_result($log_name,"【支付成功】:\n".$data."\n");
				//测试是否运行
		       
				// $email ='980502547@qq.com' ;//小杨的QQ邮箱
		  //       $config = C('THINK_EMAIL');
		  //       $emailtype = "HTML"; //信件类型，文本:text；网页：HTML
		  //       $to = $email;
		  //       $from = $config['FROM_EMAIL'];
		  //       $emailsubject = "用户实名认证申请";
		            
		  //           // $url = 'http://www.rexury.com/Admin';
		  //       $emailbody = $xml.'<br/>'.$data;
		  //       think_send_mail($to, $from, $emailsubject, $emailbody, $emailtype);
				$data = $notify->getData();	
				/*********************自己的逻辑代码*****************************/
				$Order=D('order');
				$is_pay=$Order->where('order_num='.$data['out_trade_no'])->getField('is_pay,product_id');
				$order_num=$data['out_trade_no'];//商户订单号
				$ord['zfb_num']      =$data['transaction_id'];//微信支付订单号
				// $data['accept_time'] =$data['notify_time'];//微信支付返回时间
				$ord['pay_trade_status']  =$data['return_code'];//微信支付返回结果
				$ord['payment_notify_id']     =$parameter['bank_type'];//支付银行
				$ord['payment_notify_time']   =$data['time_end'];//微信支付完成时间
				$ord['payment_buyer_email']   =$data['openid'];//用户在商户appid下的唯一标识
				$ord['notify_type']=$data['notify_type'];//用户是否关注公众号
				$ord['is_pay']   =1;
				$ord['is_send'] = 0;
				$ord['is_accept']=0;

				$pid = empty($is_pay['product_id'])?implode(",",$is_pay['product_id']):$is_pay['product_id'];
				//所有支付ID格式化为字符串
				$map['id']  = array('in',$pid);
		        $product = D('product')->where($map)->setField('stock',2);//查找id在购物车上的商品
				
				$Order->where(array('order_num'=>$order_num))->save($ord);
			}
			
			//商户自行增加处理流程,
			//例如：更新订单状态
			//例如：数据库操作
			//例如：推送支付完成信息
	}
}
}